#ifndef PEER_H
#define PEER_H

#include <QObject>
#include "ping.h"
#include <QByteArray>
#include <QTcpSocket>

class Peer : public QObject
{

Q_OBJECT

public:

    Peer(QString endereco_ip, int num_ordem = 0);
    void enviarMensagem (QString texto);

    inline int getNumeroOrdem () { return this->num_ordem; }
    inline void setNumeroOrdem (int num_ordem) { this->num_ordem = num_ordem; }

    inline QByteArray getDadosRecebidos () { return this->dados; }

    inline float getAtraso () { return this->atraso; }
    inline float getBandaDisponivel () { return this->banda_disponivel; }

    void calcularDadosRede();

    inline bool calculosTerminados() { return this->calculosProntos; }
    inline bool transmissaoTerminada () { return this->transmissaoPronta; }

public slots:

    void lerDados ();

private slots:

    void iniciarCalculoVelocidade();
    void finalizarConta();


signals:

    void dadoRecebido (QByteArray* array);
    void transmissaoFinalizada ();
    void calculosRealizados ();

private:

    Ping* ping;
    QByteArray dados;
    int num_ordem;
    QTcpSocket* socket;
    //unidade: milisegundos
    float atraso;
    //unidade: bytes/milisegundo
    float banda_disponivel;

    bool calculosProntos;
    bool transmissaoPronta;

    QString endereco_ip;
};

#endif // PEER_H
